﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Negocio.Generico;
using Negocio.View;
using System.IO;

namespace PresentacionWindows
{
    public partial class uscMiperfil : UserControl
    {

        #region Propiedades

        private int? CoPersona;

        private PersonaDTO fichaUsuario;

        #endregion
        public uscMiperfil( PersonaDTO tokenUsuario)
        {
            InitializeComponent();
            this.CoPersona = tokenUsuario.CoPersona;
            fichaUsuario = tokenUsuario;
            DStoBingind();
        }


        #region Funciones privadas

        private void DStoBingind() 
        {
            this.txtApellido1.Text = fichaUsuario.Apellido1;
            this.txtApellido2.Text = fichaUsuario.Apellido2;
            this.txtNombre.Text = fichaUsuario.Nombre;
            this.txtDNI.Text = fichaUsuario.Dni;
            this.txtEmail.Text = fichaUsuario.Email;
            this.txtrutaDocumento.Text = fichaUsuario.NombreImagen;
            this.txtNick.Text = fichaUsuario.Nick;
        }


        public static string md5(string Value)
        {
            System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] data = System.Text.Encoding.ASCII.GetBytes(Value);
            data = x.ComputeHash(data);
            string ret = "";
            for (int i = 0; i < data.Length; i++)
                ret += data[i].ToString("x2").ToLower();
            return ret;
        }

        #endregion


        #region Eventos

        private void btnOpenDialog_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.ofdDocumento.ShowDialog() == DialogResult.OK)
                {
                    this.txtrutaDocumento.Text = this.ofdDocumento.FileName;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en la carga del documento. Exepcion:" + ex);
            }
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            this.txtContraseñaVieja.Enabled = checkBox1.Checked;
            this.txtNuevaContraseña.Enabled = checkBox1.Checked;
            this.txtRepiteContraseña.Enabled = checkBox1.Checked;
        }

        #endregion



        private void txtContraseñaVieja_Leave(object sender, EventArgs e)
        {
            if (md5(txtContraseñaVieja.Text) != fichaUsuario.Userhash)
            {
                lblContraseñaIncorrecta.Visible = true;
            }
            else 
            {
                lblContraseñaIncorrecta.Visible = false;
            }
        }

        private void txtRepiteContraseña_Leave(object sender, EventArgs e)
        {
            if (txtNuevaContraseña.Text != txtRepiteContraseña.Text)
            {
                lblContrasñeaRepetidaIncorrecta.Visible = true;
            }
            else 
            {
                lblContrasñeaRepetidaIncorrecta.Visible = false;
            }

        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                PersonaDTO filtro= RellenaBean();
                 GenericaView obj = GenericaView.GetInstance();
                 if (obj.Actualiza(filtro)) 
                 {
                     MessageBox.Show("La persona se ha actualizado correctamente");
                 }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha habido un error a la hora de modificar los datos del profesor");
            }
        }


        private PersonaDTO RellenaBean() 
        {
            PersonaDTO objeto = new PersonaDTO();
            objeto.CoPersona = fichaUsuario.CoPersona;
            objeto.Apellido1=this.txtApellido1.Text;
            objeto.Apellido2=this.txtApellido2.Text;
            objeto.Nombre=this.txtNombre.Text;
            objeto.Dni =this.txtDNI.Text;
            objeto.Email = this.txtEmail.Text;
            objeto.Nick = this.txtNick.Text;
            if (txtrutaDocumento.Text != fichaUsuario.NombreImagen)
            {
                FileStream FilStr = new FileStream(txtrutaDocumento.Text, FileMode.OpenOrCreate);
                BinaryReader BinRed = new BinaryReader(FilStr);
                objeto.Imagen = BinRed.ReadBytes((int)BinRed.BaseStream.Length);
                objeto.NombreImagen = ofdDocumento.FileName;
            }
            if (checkBox1.Checked) 
            {
                objeto.Userhash = md5(txtNuevaContraseña.Text);
            }
            return objeto;
        }
    }
}
